<?php

use PhpAmqpLib\Message\AMQPMessage;

require_once './Base.php';

class PushFanout extends Base
{
    public function run()
    {
//        1生产者与消费者没有直接连接 都是交换机在通讯
//        2 交换机队列如果是保持，持续化只需要创建一次
//        3 消费者与交换机没有直接关系都是与队列有关系
//        4 生产者只关心绑定交换机与吧消息推送给交换机
//        5 交换机只关心吧绑定的队列分配消息 分配消息的类型是1对1 还是1对多
        $exchangeName = 'liu_qiang_test_fanout'; //交换机名
        $queueName = 'liu_qiang_test_queue_fanout'; //队列名称
        $routingKey = 'liu_qiang_fanout'; //路由关键字(也可以省略)
        //创建交换机   type类型 direct 可以不创建交换机使用默认也可以
//        $this->exchangeDeclare($exchangeName, 'fanout');
//         创建队列
//        $this->queueDeclare($queueName.'2');
        //绑定队列在交换机上 必须绑定
//        $this->queueBind($queueName, $exchangeName, $routingKey);
//        $this->queueBind($queueName . '2', $exchangeName, $routingKey);
//        exit;
        for ($i = 0; $i <= 10000; $i++) {
            $msgBody = json_encode(["name" => "刘强" . mt_rand(), "age" => mt_rand()]);
            $msg = new AMQPMessage($msgBody, ['content_type' => 'text/plain', 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]); //生成消息
            $this->channel->basic_publish($msg, $exchangeName, $routingKey); //推送消息到某个交换机
        }
        $this->close();//关闭链接

    }

    //创建队列 交换机执行一次就可以了
    public function createQueueExchangeDeclare()
    {

    }
}

$obj = new PushFanout();
$obj->run();